const ws = require('nodejs-websocket')
const TYPE_ENTETR = 0
const TYPE_OUTER = 1
const TYPE_MSG = 2
// 分析：
// 消息应该是一个对象
// type：0表示进入聊天室的消息
// type：1用户离开聊天室的消息
// type：2正常的聊天消息
// msg：消息的内容
// time：聊天的具体时间
// 记录当前链接上来的总的用户数量
let count = 0
// conn表示每个链接到服务器的用户，都会有一个conn
const server = ws.createServer(conn => {
  count++

  conn.userName=`用户${count}`
  //1、 告诉所有人，有人加入了聊天室
  // broadcast(`${conn.userName}进入了聊天室`)
broadcast({
  type:TYPE_ENTETR,
  msg:`${conn.userName}进入了聊天室`,
  time:new Date().toLocaleTimeString()
})

  // 创建了一个服务
  console.log('新的链接')
  conn.on('text',data=>{
    // 接受到了浏览器的数据
    console.log('接受到了浏览器的数据')
    // 2、当我们接收到某个用户的信息的时候，告诉所有用户，发送的消息内容是什么
    // conn.send...这个只代表当前用户，那怎么告诉所有用户呢？可以使用server.connections,这是一个包含所有用户的数组
    // broadcast(data)
    broadcast({
      type:TYPE_MSG,
      msg:data,
      time:new Date().toLocaleTimeString()
    })
  })
  conn.on('close',data=>{
    count--
    // 关闭连接
    console.log('关闭连接')
    // 3、有人离开，告诉所有用户有人离开了聊天室
  })
  conn.on('error',data=>{
    // 发生异常，比如关闭链接
    console.log('发生异常，比如关闭链接')
    // broadcast(`${conn.userName}离开了聊天室`)
    broadcast({
      type:TYPE_OUTER,
      msg:`${conn.userName}离开了聊天室`,
      time:new Date().toLocaleTimeString()
    })
  })
})
// 广播，给所有的用户发消息
function broadcast (data) {
  server.connections.forEach(item=>{
      item.send(JSON.stringify(data))
  })
}
server.listen(3000,()=>{
  console.log('监听端口3000')
})
